/**
 * 
 */
package com.zhanggz.mypattern.singleton;

/**
 * @author zhanggz
 *
 * @date 2015年6月19日
 */
public class LockSingleton {
	/**
	 * 此方式未能很好的解决线程同步问题，由于JVM内存模型为“无序写入”，当线程A执行到下面第2步时，线程B有可能会拿到一个不完整的对象
	 */
	// private static LockSingleton instance;
	/**
	 * 此方式在jdk1.5以后生效
	 */
	private volatile static LockSingleton instance;

	private LockSingleton() {
	}

	public static LockSingleton getInstance() {
		if (instance == null) {
			synchronized (LockSingleton.class) { // 1
				if (instance == null) { // 2
					instance = new LockSingleton(); // 3
				}
			}
		}
		return instance;
	}
}
